home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / machserver / 1.098 / include / proc.h < prev    next >
C/C++ Source or Header  |  1991-08-09  |  19KB  |  599 lines

  1. /*
  2.  * procUser.h --
  3.  *
  4.  *    Definitions for use in the Proc system calls.
  5.  *
  6.  * Copyright 1986, 1988 Regents of the University of California
  7.  * Permission to use, copy, modify, and distribute this
  8.  * software and its documentation for any purpose and without
  9.  * fee is hereby granted, provided that the above copyright
  10.  * notice appear in all copies.  The University of California
  11.  * makes no representations about the suitability of this
  12.  * software for any purpose.  It is provided "as is" without
  13.  * express or implied warranty.
  14.  *
  15.  * $Header: /sprite/src/lib/include/RCS/proc.h,v 1.18 91/05/17 17:30:23 kupfer Exp $ SPRITE (Berkeley)
  16.  */
  17.  
  18. #ifndef _PROCUSER
  19. #define _PROCUSER
  20.  
  21.  
  22. /*
  23.  * Process Termination Reason flags:
  24.  *
  25.  *   PROC_TERM_EXITED        - The process has called Proc_Exit.
  26.  *   PROC_TERM_DETACHED        - The process has called Proc_Detach.
  27.  *   PROC_TERM_SIGNALED        - The process has died because of a signal.
  28.  *   PROC_TERM_DESTROYED    - The process has died because the internal
  29.  *                  state of the process was found to be
  30.  *                  invalid as a result of a user level error.
  31.  *   PROC_TERM_SUSPENDED    - The process has been suspended.
  32.  *   PROC_TERM_RESUMED        - The process has resumed execution as the
  33.  *                  result of a resume signal.
  34.  */
  35.  
  36. #define PROC_TERM_EXITED        1
  37. #define PROC_TERM_DETACHED        2
  38. #define PROC_TERM_SIGNALED        3
  39. #define PROC_TERM_DESTROYED        4
  40. #define    PROC_TERM_SUSPENDED        5
  41. #define    PROC_TERM_RESUMED        6
  42.  
  43. /*
  44.  * Reasons why a process was destroyed (PROC_TERM_DESTROYED):
  45.  * 
  46.  * PROC_BAD_STACK        - A process's user stack is invalid upon
  47.  *                  return from a signal handler.
  48.  * PROC_BAD_PSW         - The processor status word that is to be
  49.  *                  restored upon return from a signal handler
  50.  *                  has the supervisor bit set.
  51.  * PROC_VM_READ_ERROR        - The virtual memory system couldn't read from
  52.  *                  the page server.
  53.  * PROC_VM_WRITE_ERROR        - The virtual memory system couldn't write to
  54.  *                  the page server.
  55.  */
  56.  
  57. #define    PROC_BAD_STACK            1
  58. #define    PROC_BAD_PSW            2
  59. #define    PROC_VM_READ_ERROR        3
  60. #define    PROC_VM_WRITE_ERROR        4
  61.  
  62. #ifndef _ASM
  63. /*
  64.  *  Definition of a process ID.
  65.  */
  66.  
  67. typedef unsigned int     Proc_PID;
  68.  
  69.  
  70.  
  71. /*
  72.  * Special values to indicate the pid of the current process, or the host on
  73.  * which it is running, respectively.
  74.  */
  75.  
  76. #define PROC_MY_PID    ((Proc_PID) 0xffffffff)
  77. #define PROC_MY_HOSTID    ((unsigned int) 0xffffffff)
  78.  
  79. /*
  80.  * Mask to extract process table index from pid.
  81.  */
  82. #define    PROC_INDEX_MASK        0x000000FF
  83.  
  84. /*
  85.  * Convert a process id into a process table index.
  86.  */
  87. #define    Proc_PIDToIndex(pid) ((pid) & PROC_INDEX_MASK)
  88.  
  89. /*
  90.  * Special parameter to Proc_Migrate to evict all processes from a
  91.  * workstation.
  92.  */
  93.  
  94. #define PROC_ALL_PROCESSES    ((Proc_PID) 0)
  95.  
  96. /*
  97.  * Special family value to indicate the process isn't in a family and 
  98.  * a macro to see if the process is in a family.
  99.  */
  100.  
  101. #define PROC_NO_FAMILY    (Proc_PID) -1
  102. #define Proc_In_A_Family(familyID) ((familyID) != PROC_NO_FAMILY)
  103.  
  104.  
  105. /*
  106.  * PROC_SUPER_USER_ID is the user ID of the omnipotent super-user and 
  107.  * PROC_NO_ID is used when specifying no id to the Proc_SetIDs call.
  108.  */
  109.  
  110. #define PROC_SUPER_USER_ID      0
  111. #define PROC_NO_ID          -1
  112.  
  113. /*
  114.  * PROC_NO_INTR_PRIORITY is used to provide system processes 
  115.  *  infinitely-high priority.
  116.  */
  117.  
  118. #define PROC_MIN_PRIORITY    -2
  119. #define PROC_MAX_PRIORITY     2
  120.  
  121. #define PROC_NO_INTR_PRIORITY     2
  122. #define PROC_HIGH_PRIORITY     1
  123. #define PROC_NORMAL_PRIORITY     0
  124. #define PROC_LOW_PRIORITY    -1
  125. #define PROC_VERY_LOW_PRIORITY    -2
  126.  
  127. /*
  128.  *  Process state flags:
  129.  */
  130. typedef enum {
  131.     PROC_UNUSED,    /* The process doesn't exist yet. */
  132.     PROC_RUNNING,    /* The process is executing on a processor. */
  133.     PROC_READY,        /* The process is ready to execute. */
  134.     PROC_WAITING,    /* The process is waiting for an event to occur such
  135.              * as I/O completion or a mutex lock released. */
  136.     PROC_EXITING,    /* The process has terminated and is on the 
  137.              * exiting list. */
  138.     PROC_DEAD,        /* The process has been terminated is on the dead list*/
  139.     PROC_MIGRATED,    /* The process is running on a remote machine. */
  140.     PROC_NEW,        /* The process was just created. */
  141.     PROC_SUSPENDED    /* The process is suspended. */
  142. } Proc_State;
  143.  
  144. #endif /* _ASM */
  145.  
  146.  
  147. /*
  148.  * Process attributes flags:
  149.  *
  150.  *  PROC_KERNEL               - The process is a kernel process.
  151.  *  PROC_USER                 - The process is a user process.
  152.  *  PROC_DEBUGGED        - The process is being debugged by the system
  153.  *                  debugger.
  154.  *  PROC_DEBUG_ON_EXEC        - The process will start in debugged mode.
  155.  *  PROC_DEBUG_WAIT        - A debugger is waiting for this process to go
  156.  *                  onto the debug list.
  157.  *  PROC_SINGLE_STEP_FLAG    - The process will have the trace bit set
  158.  *                  before it runs.
  159.  *  PROC_MIG_PENDING        - The process will be migrated when it
  160.  *                  completes its next trap.
  161.  *  PROC_DONT_MIGRATE        - The process should not be migrated yet, even
  162.  *                  when it traps.
  163.  *  PROC_FOREIGN        - The process has been migrated from another
  164.  *                  workstation to this one.
  165.  *  PROC_DYING            - The process is comitting hari-kari.
  166.  *  PROC_LOCKED            - This process is locked.
  167.  *  PROC_NO_VM            - The virtual memory resources have been
  168.  *                  freed up for this user process.
  169.  *  PROC_MIGRATING        - The process is in the middle of migrating
  170.  *                  to another workstation.  This happens after
  171.  *                  PROC_MIG_PENDING is set but before the
  172.  *                  process's state becomes PROC_MIGRATED and
  173.  *                  its PROC_MIGRATION_DONE flag is set.
  174.  *  PROC_MIGRATION_DONE        - indicates successful completion of a
  175.  *                  migration trap.
  176.  *  PROC_ON_DEBUG_LIST        - The process is on the debug list.
  177.  *  PROC_REMOTE_EXEC_PENDING    - The process should perform an exec as part
  178.  *                  of migration.
  179.  *  PROC_MIG_ERROR        - Indicates asynchronous error before
  180.  *                  migrating process context switches.
  181.  *  PROC_EVICTING        - Indicates process is being evicted
  182.  *                  (for statistics gathering).
  183.  *  PROC_KILLING        - Indicates we're trying to kill the process
  184.  *                  but it's in the debugger.  This is a
  185.  *                  big hack to get dbx to work.
  186.  */
  187.  
  188. #define PROC_KERNEL            0x00001
  189. #define PROC_USER            0x00002
  190. #define PROC_DEBUGGED            0x00004
  191. #define PROC_DEBUG_ON_EXEC        0x00008
  192. #define PROC_SINGLE_STEP_FLAG        0x00010
  193. #define PROC_DEBUG_WAIT            0x00020
  194. #define PROC_MIG_PENDING        0x00040
  195. #define PROC_DONT_MIGRATE        0x00080
  196. #define PROC_FOREIGN            0x00100
  197. #define PROC_DYING            0x00200
  198. #define PROC_LOCKED            0x00400
  199. #define PROC_NO_VM            0x00800
  200. #define PROC_MIGRATING            0x01000
  201. #define PROC_MIGRATION_DONE        0x02000
  202. #define PROC_ON_DEBUG_LIST        0x04000
  203. #define PROC_REMOTE_EXEC_PENDING    0x08000
  204. #define PROC_MIG_ERROR            0x10000
  205. #define PROC_EVICTING            0x20000
  206. #define PROC_KILLING            0x40000
  207.  
  208. /* 
  209.  * The include's must come after the definition of Proc_State (and 
  210.  * possibly some other stuff as well).  Blech.
  211.  */
  212.  
  213. #ifndef _ASM
  214. #include <sprite.h>
  215. #include <spriteTime.h>
  216. #ifdef KERNEL
  217. #include <sigTypes.h>
  218. #include <machTypes.h>
  219. #include <user/vmTypes.h>
  220. #else
  221. #include <kernel/sigTypes.h>
  222. #include <kernel/machTypes.h>
  223. #include <vmTypes.h>
  224. #endif
  225.  
  226. #endif /* _ASM */
  227.  
  228. #ifndef _ASM
  229.  
  230.  
  231. /*
  232.  *  Resource usage summary for a process. 
  233.  *  Used by Proc_Wait and Proc_GetResUsage.
  234.  *
  235.  *   Preliminary version: more fields will be added when needed.
  236.  *
  237.  *  Note: the cpu usage fields use the Time format. In the process
  238.  *  control block, they are stored in the Timer_Ticks format.
  239.  *  They are converted to Time format by the system calls that return
  240.  *  resource usage info.
  241.  */
  242.  
  243. typedef struct {
  244.     Time kernelCpuUsage;    /* How much time has been spent in kernel mode*/
  245.     Time userCpuUsage;        /* How much time has been spent in user mode. */
  246.  
  247.     Time childKernelCpuUsage;    /* Sum of time spent in kernel mode for 
  248.                  * all terminated children. */
  249.     Time childUserCpuUsage;    /* Sum of time been spent in user mode for
  250.                  * all terminated children. */
  251.     int    numQuantumEnds;        /* number of times the process was
  252.                  * context switched due to a quantum end. */
  253.     int numWaitEvents;        /* number of times the process was
  254.                       * context switched due to its waiting for
  255.                  *  an event. */
  256. } Proc_ResUsage;
  257.  
  258. /*
  259.  *  Request values for use with Proc_Debug system call.
  260.  */
  261.  
  262. typedef enum {
  263.     PROC_GET_THIS_DEBUG,
  264.     PROC_GET_NEXT_DEBUG,
  265.     PROC_CONTINUE,
  266.     PROC_SINGLE_STEP,
  267.     PROC_GET_DBG_STATE,
  268.     PROC_SET_DBG_STATE,
  269.     PROC_READ,
  270.     PROC_WRITE,
  271.     PROC_DETACH_DEBUGGER
  272. } Proc_DebugReq;
  273.  
  274. /*
  275.  * Flags to Proc_Wait
  276.  *
  277.  *         PROC_WAIT_BLOCK    -    Block if there if are no stopped or
  278.  *                terminated processes.
  279.  *    PROC_WAIT_FOR_SUSPEND - Return status of children that are suspended.
  280.  *                If this option isn't specified and children
  281.  *                are stopped then it is as though they are
  282.  *                still running.
  283.  */
  284. #define    PROC_WAIT_BLOCK        0x1
  285. #define    PROC_WAIT_FOR_SUSPEND    0x2
  286.  
  287. #define PROC_NUM_GENERAL_REGS 16
  288.  
  289. typedef struct {
  290.     Proc_PID    processID;        /* Process ID of debuggee */
  291.     int    termReason;            /* Reason why process has died or
  292.                      * it has been detached. */
  293.     int    termStatus;            /* Exit/detach status or signal number
  294.                      * that caused the process to die. */
  295.     int    termCode;            /* The code for the signal. */
  296.     Mach_RegState regState;        /* The register state of the process. */
  297.     int    sigHoldMask;            /* Mask of signals to be held. */
  298.     int    sigPendingMask;            /* Mask of pending signals. */
  299.     int    sigActions[SIG_NUM_SIGNALS];     /* Array of the different types
  300.                        of actions for signals. */
  301.     int    sigMasks[SIG_NUM_SIGNALS];     /* Array of signal hold masks for 
  302.                        signal handlers. */
  303.     int    sigCodes[SIG_NUM_SIGNALS];     /* Array of signal handlers for 
  304.                        signals. */
  305.  
  306. } Proc_DebugState;
  307.  
  308. /*
  309.  * Structure that represents one environment variable.
  310.  */
  311.  
  312. typedef struct {
  313.     char *name;        /* Variable name. */
  314.     char *value;    /* Value for variable. */
  315. } Proc_EnvironVar;
  316.  
  317. /*
  318.  * Process information. Add new fields to the end of this structure!
  319.  */
  320. typedef struct  {
  321.     int        processor;    /* Processor number the process is running on
  322.                  * or wants to run on if the processor is
  323.                  * available.  */
  324.  
  325.     Proc_State    state;        /* Describes a process's current running state.
  326.                  * >>> See Proc_State definitions above. */ 
  327.  
  328.     int        genFlags;    /* Flags to describe a processes overall state.
  329.                  * >>> See definitions below */ 
  330.  
  331.     /*
  332.      *-----------------------------------------------------------------
  333.      *
  334.      *   Various Process Identifiers.
  335.      *    
  336.      *    Note that the user and effectiveUser ID are kept here because
  337.      *    they are used for permission checking in various places.  There
  338.      *    is also a list of group IDs which is kept in the filesystem state.
  339.      *
  340.      *-----------------------------------------------------------------
  341.      */
  342.  
  343.     Proc_PID    processID;        /* Actual process ID of this
  344.                      * process (for migrated processes
  345.                      * this is different than the PID
  346.                      * that the user sees). */
  347.     Proc_PID    parentID;        /* The process ID of the parent 
  348.                      * of this process. */
  349.     int        familyID;        /* The id of the process family that 
  350.                      * this process belongs to. */
  351.     int        userID;            /* The user id is used to check access
  352.                      * rights to files and check ability
  353.                      * to signal other processes. */
  354.     int        effectiveUserID;    /* The effective user id is used
  355.                      * for setuid access. */
  356.  
  357.     /*
  358.      *-----------------------------------------------------------------
  359.      *
  360.      *    Synchronization fields.
  361.      *
  362.      * Synchronization state includes an event the process is waiting on.
  363.      *
  364.      *-----------------------------------------------------------------
  365.      */
  366.  
  367.     int         event;         /* Event # the process is waiting for. */
  368.  
  369.     /*
  370.      *-----------------------------------------------------------------
  371.      *
  372.      *    Scheduling fields.
  373.      *
  374.      *-----------------------------------------------------------------
  375.      */
  376.  
  377.  
  378.     int      billingRate;    /* Modifies the scheduler's calculation of
  379.                  * the processes priority.  */
  380.     unsigned int recentUsage;    /* Amount of CPU time used recently */
  381.     unsigned int weightedUsage;    /* Smoothed avg. of CPU usage, weighted by
  382.                  * billing rate. */
  383.     unsigned int unweightedUsage; /* Smoothed avg. of CPU usage, not weighted by
  384.                    * billing rate. */
  385.  
  386.     /*
  387.      *-----------------------------------------------------------------
  388.      *
  389.      *    Accounting and Resource Usage fields.
  390.      *
  391.      *-----------------------------------------------------------------
  392.      */
  393.  
  394.     Time kernelCpuUsage;    /* How much time has been spent in kernel mode*/
  395.     Time userCpuUsage;        /* How much time has been spent in user mode. */
  396.  
  397.     Time childKernelCpuUsage;    /* Sum of time spent in kernel mode for 
  398.                       * all terminated children. */
  399.     Time childUserCpuUsage;    /* Sum of time spent in user mode for
  400.                       * all terminated children. */
  401.     int     numQuantumEnds;        /* number of times the process was 
  402.                       * context switched due to a quantum 
  403.                      * end. */
  404.     int        numWaitEvents;        /* number of times the process was
  405.                      * context switched due to its waiting 
  406.                      * for an event. */
  407.     unsigned int schedQuantumTicks;    /* Number of clock ticks until this 
  408.                      * process is due to be switched out. */
  409.  
  410.     /*
  411.      *-----------------------------------------------------------------
  412.      *
  413.      *   Virtual Memory fields.
  414.      *
  415.      *-----------------------------------------------------------------
  416.      */
  417.     Vm_SegmentID        vmSegments[VM_NUM_SEGMENTS];
  418.  
  419.  
  420.     /*
  421.      *-----------------------------------------------------------------
  422.      *
  423.      *    Signals
  424.      *
  425.      *-----------------------------------------------------------------
  426.      */
  427.  
  428.     int        sigHoldMask;        /* Mask of signals to be held. */
  429.     int        sigPendingMask;        /* Mask of pending signals. */
  430.                         /* Array of the different types
  431.                        of actions for signals. */
  432.     int        sigActions[SIG_NUM_SIGNALS];
  433.                         /* Array of signal hold masks for 
  434.                        signal handlers. */
  435.     /*
  436.      *---------------------------------------------------------------------
  437.      *
  438.      * Data for process migration.
  439.      *
  440.      *---------------------------------------------------------------------
  441.      */
  442.     int        peerHostID;         /* If on home node, ID of remote node.
  443.                       * If on remote node, ID of home node.
  444.                       * If not migrated, undefined. */
  445.     Proc_PID    peerProcessID;         /* If on remote note, process ID on
  446.                       * home node, and vice-versa. */
  447. } Proc_PCBInfo;
  448.  
  449. /*
  450.  * Define the maximum length of the name and value of each enviroment
  451.  * variable and the maximum size of the environment.
  452.  */
  453.  
  454. #define    PROC_MAX_ENVIRON_NAME_LENGTH    4096
  455. #define    PROC_MAX_ENVIRON_VALUE_LENGTH    4096
  456. #define    PROC_MAX_ENVIRON_SIZE        100
  457.  
  458. /*
  459.  * Define the maximum size of the first line of an interpreter file.
  460.  */
  461.  
  462. #define PROC_MAX_INTERPRET_SIZE        80
  463.  
  464. /*
  465.  * Definitions for the Proc_G/SetIntervalTimer system calls.
  466.  *
  467.  * Currently, only 1 type of timer is defined:
  468.  *  PROC_TIMER_REAL -  time between intervals is real (a.k.a wall-clock) time.
  469.  *
  470.  * The values and the structure have the same values and layout as their 
  471.  * 4.3BSD equivalents.
  472.  */
  473.  
  474. #define PROC_TIMER_REAL        0
  475. /*
  476.  * not used yet.
  477. #define PROC_TIMER_VIRTUAL    1
  478. #define PROC_TIMER_PROFILE    2
  479. */
  480.  
  481. #define PROC_MAX_TIMER        PROC_TIMER_REAL
  482.  
  483. typedef struct {
  484.     Time    interval;    /* Amount of time between timer expirations. */
  485.     Time    curValue;    /* Amount of time till the next expiration. */
  486. } Proc_TimerInterval;
  487.  
  488. /* 
  489.  * Size of the buffer containing arguments, to be passed back to users.  
  490.  */
  491.  
  492. #define PROC_PCB_ARG_LENGTH 256
  493.  
  494. /*
  495.  * The following structure is used to transfer fixed-length argument strings
  496.  * from the kernel back to user space.  A typedef simplifies later
  497.  * declarations (and may be the only way to do it?), since 
  498.  *    char *argPtr[PROC_PCB_ARG_LENGTH]
  499.  * would be an array of pointers to strings rather than an array of strings.
  500.  */
  501.  
  502. typedef struct {
  503.     char argString[PROC_PCB_ARG_LENGTH];
  504. } Proc_PCBArgString;
  505.  
  506.  
  507. /*
  508.  * Define the state of this machine w.r.t accepting migrated processes.
  509.  * A machine must always be willing to accept its own processes if they
  510.  * are migrated home.  Other than that, a host may allow migrations onto
  511.  * it under various sets of criteria, and may allow migrations away from
  512.  * it under similar sets of criteria.
  513.  *
  514.  *    PROC_MIG_IMPORT_NEVER        - never allow migrations to this host.
  515.  *    PROC_MIG_IMPORT_ROOT         - allow migrations to this host only
  516.  *                      by root.
  517.  *    PROC_MIG_IMPORT_ALL          - allow migrations by anyone.
  518.  *    PROC_MIG_IMPORT_ANYINPUT     - don't check keyboard input when
  519.  *                      determining availability.
  520.  *    PROC_MIG_IMPORT_ANYLOAD      - don't check load average when
  521.  *                      determining availability.
  522.  *    PROC_MIG_IMPORT_ALWAYS      - don't check either.
  523.  *    PROC_MIG_EXPORT_NEVER        - never export migrations from this
  524.  *                       host.
  525.  *    PROC_MIG_EXPORT_ROOT            - allow only root to export.
  526.  *    PROC_MIG_EXPORT_ALL            - allow anyone to export.
  527.  *
  528.  * For example, a reasonable default for a file server might be to import
  529.  * and export only for root; for a user's machine, it might be to allow
  530.  * anyone to migrate; and for a compute server, it might never export
  531.  * and import always regardless of load average or keyboard input.  (The
  532.  * load average would not have to be exceptionally low to determine
  533.  * availability; the host still would only be selected if the load average
  534.  * were low enough to gain something by migrating to it.)
  535.  */
  536.  
  537. #define PROC_MIG_IMPORT_NEVER              0
  538. #define PROC_MIG_IMPORT_ROOT        0x00000001
  539. #define PROC_MIG_IMPORT_ALL         0x00000003
  540. #define PROC_MIG_IMPORT_ANYINPUT    0x00000010
  541. #define PROC_MIG_IMPORT_ANYLOAD        0x00000020
  542. #define PROC_MIG_IMPORT_ALWAYS  \
  543.             (PROC_MIG_IMPORT_ANYINPUT | PROC_MIG_IMPORT_ANYLOAD)
  544. #define PROC_MIG_EXPORT_NEVER             0
  545. #define PROC_MIG_EXPORT_ROOT        0x00010000
  546. #define PROC_MIG_EXPORT_ALL        0x00030000
  547.  
  548. #define PROC_MIG_ALLOW_DEFAULT (PROC_MIG_IMPORT_ALL | PROC_MIG_EXPORT_ALL)
  549.  
  550. /*
  551.  * Library call declarations.
  552.  */
  553.  
  554. extern ReturnStatus Proc_SetExitHandler();
  555. extern void        Proc_Exit();
  556.  
  557. /*
  558.  * System call declarations.
  559.  */
  560.  
  561. extern ReturnStatus Proc_Fork();
  562. extern void        Proc_RawExit();
  563. extern ReturnStatus Proc_Detach();
  564. extern ReturnStatus Proc_Wait();
  565. extern ReturnStatus Proc_RawWait();
  566. extern ReturnStatus Proc_Exec();
  567. extern ReturnStatus Proc_ExecEnv();
  568.  
  569. extern ReturnStatus Proc_GetIDs();
  570. extern ReturnStatus Proc_SetIDs();
  571. extern ReturnStatus Proc_GetGroupIDs();
  572. extern ReturnStatus Proc_SetGroupIDs();
  573. extern ReturnStatus Proc_GetFamilyID();
  574. extern ReturnStatus Proc_SetFamilyID();
  575.  
  576. extern ReturnStatus Proc_GetPCBInfo();
  577. extern ReturnStatus Proc_GetResUsage();
  578. extern ReturnStatus Proc_GetPriority();
  579. extern ReturnStatus Proc_SetPriority();
  580.  
  581. extern ReturnStatus Proc_Debug();
  582. extern ReturnStatus Proc_Profile();
  583.  
  584. extern ReturnStatus Proc_SetIntervalTimer();
  585. extern ReturnStatus Proc_GetIntervalTimer();
  586.  
  587. extern ReturnStatus Proc_SetEnviron();
  588. extern ReturnStatus Proc_UnsetEnviron();
  589. extern ReturnStatus Proc_GetEnvironVar();
  590. extern ReturnStatus Proc_GetEnvironRange();
  591. extern ReturnStatus Proc_InstallEnviron();
  592. extern ReturnStatus Proc_CopyEnviron();
  593.  
  594. extern ReturnStatus Proc_Migrate();
  595.  
  596. #endif /* _ASM */
  597.  
  598. #endif /* _PROCUSER */
  599.